今天介紹一種叫做 Tree 的資料結構,這東西看圖懂一半,所以不解釋直接上圖:
(圖片摘自維基百科)
好的,大家應該懂了。Tree 就是一種由上而下的結構,點和點之間用線連接起來,對於每條線來說,上方的是父節點,下面的是子節點。對點與點之間來說,父子關係是相對的。一個點可以是某個點的父節點,但又是另一個點的子節點,就像你同時是你爸的兒子但也是你兒子的爸爸一樣,對象不同,身份不同。另外,如果每個點最多都只有兩個子節點,那這棵樹就會變成二元樹。
關於 tree 還有蠻多細節,像是 tree 怎麼組建,或是搜尋 tree 的兩種方法,好兄弟 DFS 和 BFS,這個就留待明天繼續啦。
今天簡單看看 tree 這種資料結構,每個點如果有子節點的話,會用 x.left, x.right 來儲存子節點的數值。之前有講過 divide and conquer,這題就是用遞迴的方式去拆最底層算回來。
/*
* Definition for a binary tree node.
* function TreeNode(val, left, right) {
* this.val = (val===undefined ? 0 : val)
* this.left = (left===undefined ? null : left)
* this.right = (right===undefined ? null : right)
* }
*/
// javascript
var maxDepth = function(root) {
if (!root) return 0
return Math.max(maxDepth(root.left), maxDepth(root.right)) + 1
};